using google cloud app engine to host golang project

为什么用谷歌云

  • 有首年300美元的优惠
  • 各个子产品、服务都有相应的免费额度,比如Always Free Products

对于google app engine来说,每天有28小时的实例时间+5GB的云存储。

除了engine,其他google云上几乎所有服务都有对应的免费额度,比如Google Cloud Vision API每个月1000个单位的API调用,Google Cloud Speech API 每个月60分钟的免费额度。

Google Cloud App Engine(GAE)

提到GAE大家肯定能联想到一个词,翻墙

翻墙

对,就是那个免费的翻墙工具GoAgent。

第一个基于Go的App Engine

经过一系列步骤,我们得到第一个App Engine代码
通过查看hello.go的代码

1
cat hello.go

1
2
3
4
5
6
7
8
9
10
11
package hello
import (
"fmt"
"net/http"
)
func init() {
http.HandleFunc("/", handler)
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello, world!")
}

这个应用只有一个处理函数,并且这个处理函数只单纯的返回一个hello world.

除此之外,还有一个文件app.yaml,这个文件是用来描述hello world这个应用的配置文件
其内容如下

1
2
3
4
5
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app

这个配置文件告诉我们如下信息:

  1. 这个app的运行时环境是Go语言
  2. 使用的API的版本是go1
  3. handlers用来指示不同路径的请求应该导向那个函数
  4. script: _go_app这行是调试的时候使用的,在正式的线上环境中,这个参数会被忽略。

按照指示,分别运行命令,就可以在浏览器中看到刚才的应用了。

下一步就是下载sdk,初始化sdk,然后开始开发。

标准环境(Stardared)和宽松环境(flexiable)

Google app engine 提供两种类型的Go环境,标准环境(Stardared)和宽松环境(flexiable),具体两者有什么区别呢,简单来说:

  1. 宽松环境用的容器技术,所以和在本地机器上面运行程序没有任何区别,仅仅是把本地的服务云化了;
  2. 而标准环境则是经过特定平台改装的,有很多限制,比如不能访问文件系统,不能使用golang自带的http包发送网络请求,一旦发送会返回permission denied的错误;
    更具体的限制可以参考文档 https://cloud.google.com/appengine/docs/the-appengine-environments

价格

下面是标准环境的规格和价格图

从上面两个图可以看到,一个1B内存+2.4GHz的实例需要每小时0.3美元。

下面是宽松环境的价格图


可以看到选择一个vCPU+1GB内存,每个小时需要0.0597美元,是标准环境的五分之一的价钱,而且还没有限制;
但是,但是,但是宽松环境无法享受每天28个实例小时的免单,每天1GB流量的免单;

所以当你的应用只需要一个实例就可以完成工作的时候,选择标准环境可以免费使用,一旦一个实例无法完成工作的时候选择宽松环境是经济的。